package com.bilifuture.statemachine.action;

import com.bilifuture.statemachine.machine.StateMachineContext;
import com.bilifuture.statemachine.message.Response;

/**
 * @author bilifuture
 * @description: 状态机内部状态进行流转时执行的操作
 * @date 2022-02-23
 */
public abstract class Action {
    
    /**
     * 转换执行前
     *
     * @param context 上下文
     * @return {@link Response}
     */
    public abstract Response preExecute(StateMachineContext context);
    
    /**
     * 转换执行
     *
     * @param context 上下文
     * @return {@link Response}
     */
    public abstract Response execute(StateMachineContext context);
    
    /**
     * 转换执行后
     *
     * @param context 上下文
     */
    public void postExecute(StateMachineContext context){
    
    }
    
    /**
     * 转换执行完成后
     *
     * @param context 上下文
     */
    public void afterCompletion(StateMachineContext context){
    
    }
    
}
